//package edu.hawaii.examschd.modules;
//
//import java.io.File;
//import java.io.FileFilter;
//import java.io.IOException;
//import java.net.URL;
//import java.net.URLClassLoader;
//import java.security.AccessController;
//import java.security.PrivilegedAction;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.jar.JarFile;
//import java.util.jar.Manifest;
//
//
///**
// * Dynamically load modules for the application
// * @author johnmacmillan and jaysongamiao
// *
// */
//public class ModuleLoader {
//	private static List<URL> urls = new ArrayList<URL>();
//	
//	/**
//	 * Return a list containing all the class files from the modules
//	 * @return list of classes
//	 */
//	private static List<String> getModuleClasses() {
//		List<String> classes = new ArrayList<String>();
//		
//		//Get a list of files in the folder
//		File[] files = new File("folder").listFiles(new ModuleFilter());
//		
//		// for each file find its manifest
//		for(File f : files){
//			JarFile jarFile = null;
//			
//			
//			try{
//				jarFile = new JarFile(f);
//				Manifest manifest = jarFile.getManifest();
//				
//				classes.add(manifest.getMainAttributes().getValue("Module-Class"));
//				urls.add(f.toURI().toURL());
//			} catch (Exception e) {
//				e.printStackTrace();
//			} finally {
//				if(jarFile != null){
//					try{
//						jarFile.close();
//					} catch (IOException ioe){
//						ioe.getStackTrace();
//					}
//				}
//			}
//		}
//		return classes;
//	}
//	
//	/**
//	 * Filter for jar files
//	 */
//	private static class ModuleFilter implements FileFilter {
//		@Override
//		public boolean accept(File file){
//			return file.isFile() && file.getName().toLowerCase().endsWith(".jar");
//		}
//	}
//	
//	private static ClassLoader classLoader; 
//	 
//	/**
//	 * Return a list of modules found
//	 * @return list of modules
//	 */
//	public static List<Module> loadModules(){ 
//	  List<Module> modules = new ArrayList<Module>(); 
//	  
//	  AccessController.doPrivileged(new PrivilegedAction<Object>(){ 
//	    @Override 
//	    public Object run() { 
//	      classLoader = new URLClassLoader( 
//	          urls.toArray(new URL[urls.size()]),  
//	          ModuleLoader.class.getClassLoader()); 
//	      
//	      return null; 
//	    } 
//	  }); 
//	  
//	  //Load all the modules
//	  for(String c : getModuleClasses()){ 
//	    try { 
//	      Class<?> moduleClass = Class.forName(c, true, classLoader); 
//	      
//	      if(Module.class.isAssignableFrom(moduleClass)){ 
//	        Class<Module> castedClass;
//				castedClass = (Class<Module>) moduleClass;
//	
//	        Module module = castedClass.newInstance(); 
//	        
//	        modules.add(module); 
//	      }  
//	    } catch (ClassNotFoundException e) { 
//	      e.printStackTrace(); 
//	    } catch (InstantiationException e) { 
//	      e.printStackTrace(); 
//	    } catch (IllegalAccessException e) { 
//	      e.printStackTrace(); 
//	    } 
//	  } 
//	  
//	  return modules; 
//	}
// }